﻿#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    // 定义变量：L是马路总长度（单位米），M是要建地铁的区域数量
    int road_length, area_count;
    // 读取输入的马路长度和区域数量
    scanf("%d %d", &road_length, &area_count);

    // 定义数组tree：用来标记每个位置是否有树
    // 数组大小设为10001，因为题目规定马路长度L最大是10000，位置从0到10000共10001个点
    // tree[位置] = 1 表示该位置有树，= 0 表示树被移走
    int tree[10001];

    // 初始化数组：一开始马路上所有整数点都有树，所以把0到road_length的位置都设为1
    for (int i = 0; i <= road_length; i++) {
        tree[i] = 1;
    }

    // 处理每个要建地铁的区域（共area_count个区域）
    for (int i = 0; i < area_count; i++) {
        // 定义变量：start是区域起始位置，end是区域结束位置
        int area_start, area_end;
        // 读取当前区域的起始和结束位置，比如样例中的"150 300"
        scanf("%d %d", &area_start, &area_end);

        // 防止输入的起始位置比结束位置大（比如输入"300 150"），交换两者确保start <= end
        if (area_start > area_end) {
            int temp = area_start;  // 用临时变量存start的值
            area_start = area_end;  // 把end的值赋给start
            area_end = temp;        // 把原来start的值赋给end
        }

        // 把当前区域内所有位置的树标记为"移走"（设为0）
        // 循环从area_start到area_end，每个位置的树都要移除
        for (int j = area_start; j <= area_end; j++) {
            tree[j] = 0;
        }
    }

    // 统计剩余的树的数量：遍历所有位置，数tree[i]为1的个数
    int remain_tree = 0;
    for (int i = 0; i <= road_length; i++) {
        if (tree[i] == 1) {  // 如果该位置有树
            remain_tree++;    // 数量加1
        }
    }

    printf("%d\n", remain_tree);

    return 0;
}